home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / pc_board / set_user.zip / SET-USER.BAS < prev    next >
BASIC Source File  |  1992-06-07  |  7KB  |  201 lines

  1. '+--------------------------[ Set-User Ver 1.00 ]----------------------------+
  2. '|  Written By Gary Meeker 06/07/92                        Updated   /  /    |
  3. '|  SYSOP: SHARP Technical Support Line BBS               Lawrenceville, GA  |
  4. '|         (404) 962-1788                 300/1200/2400/9600 Baud. 24 Hours  |
  5. '+---------------------------------------------------------------------------+
  6. 'V1.00  06/07/92 - Initial release
  7. '-----------------------------------------------------------------------------
  8.  
  9. DEFINT A-Z
  10.  
  11. '  P.D.Q. Declarations
  12. DECLARE FUNCTION PDQExist% (FileSpec$)
  13. DECLARE FUNCTION PDQParse$ (Work$)
  14. DECLARE FUNCTION PDQValI% (Number$)
  15. DECLARE SUB CritErrOff ()
  16. DECLARE SUB CritErrOn ()
  17. DECLARE SUB SetDelimitChar (Char)
  18. DECLARE SUB PDQRestore()
  19.  
  20. '   QuickPack Declarations
  21. DECLARE FUNCTION ASCII% (Work$)
  22. DECLARE SUB SetLevel (ErrLevel%)
  23. DECLARE SUB FCopy (Source$, Dest$, Buffer$, ErrCode%)
  24.  
  25. '   Local Declarations
  26. DECLARE SUB GetParameter(Parameter$, Flag)
  27. DECLARE SUB InputOption(FileNo, Flag)
  28. DECLARE SUB Check4File(FileName$)
  29.  
  30. ' Myown Declarations
  31. DECLARE SUB DelChar (Target$, Position, Char$)
  32.  
  33. ' $INCLUDE: 'PCBTYPES.INC'
  34.  
  35. DIM USERSYS AS USERSSYSRECORD
  36. DIM User14 AS User14Record, Buffer AS STRING * 8192
  37.  
  38. C$ = UCASE$(COMMAND$)
  39. IF Len(C$) = 0 THEN
  40.    PRINT "Syntax: Set-User PCBDir  ConfigFile  [/Q] [/P] [/S] [/U] [/L] [/C]"
  41.    PRINT
  42.    PRINT "Where:     PCBDir = Drive:\Path to USERS.SYS file"
  43.    PRINT "       ConfigFile = Drive:\Path\FileName.Ext of Configuration File"
  44.    PRINT
  45.    PRINT "[/Q] = Quiet"
  46.    PRINT "[/P] = Set Level to Password in PWRD File"
  47.    PRINT "[/S] = Adjust Only USERS.SYS File if USERS file SecLevel is higher"
  48.    PRINT "[/U] = Adjust Only USERS File if USERS.SYS file SecLevel is higher"
  49.    PRINT "       If neither /S or /U then adjust to the higher of the two"
  50.    PRINT "[/L] = Use the lower level"
  51.    PRINT "[/C] = Clear Update status in USERS.SYS if USERS is changed"
  52.    END
  53. END IF
  54.  
  55. CritErrOff
  56. UserLen   = LEN(User14)
  57. SetDelimitChar 32
  58.  
  59. GetParameter "/Q", Quiet
  60. GetParameter "/U", SetUserOnly
  61. GetParameter "/S", SetSysOnly
  62. GetParameter "/P", PasswordSet
  63. GetParameter "/L", UseLower
  64. GetParameter "/C", ClearStatus
  65.  
  66. PCBDir$ = PDQParse$(C$)        'Get the PCBOARD.SYS location from Command Line
  67. ConfigFile$ = PDQParse$(C$)    'Get config file from command line
  68. IF RIGHT$(PCBDir$, 1) <> "\" THEN PCBDir$ = PCBDir$ + "\"
  69. SysFile$ = PCBDir$ + "USERS.SYS"
  70. DoorTextFile$ = PCBDir$ + "PCBDOOR.TXT"
  71.  
  72. Check4File ConfigFile$         ' Make sure they exist
  73. Check4File SysFile$
  74.  
  75. IF Quiet = 0 THEN
  76.     PRINT "Set-User 1.00....Checking "; CHR$(34); SysFile$; CHR$(34)
  77. END IF
  78.  
  79. OPEN ConfigFile$ FOR INPUT AS #1
  80.    LINE INPUT #1, UserFile$
  81.    LINE INPUT #1, PwrdFile$
  82.    LINE INPUT #1, TextFile$
  83.    LINE INPUT #1, A$
  84.    SecLimit = PDQValI(A$)
  85.    InputOption 1, SetExpLevel
  86. CLOSE #1
  87.  
  88. Check4File UserFile$           ' Make sure these exist too
  89. Check4File PwrdFile$
  90.  
  91. OPEN SysFile$ FOR BINARY AS #1
  92.    GET #1,, USERSYS
  93.    IF Quiet = 0 THEN PRINT "User: "; USERSYS.UserName$
  94. OPEN UserFile$ FOR RANDOM ACCESS READ WRITE SHARED AS #2 LEN = UserLen
  95.    IF ERR THEN PRINT : PRINT "Error Occured Opening Users File - ("; ERR; ")"
  96.    GET #2, USERSYS.RecNo, User14
  97.    IF ERR THEN PRINT : PRINT "Error Occured Reading Users File - ("; ERR; ")"
  98.    SecLevel = ASC(User14.SecLevel$)
  99.    IF PasswordSet THEN
  100.       OPEN PwrdFile$ FOR INPUT AS #3
  101.          SetDelimitChar 44                 ' Set to ','
  102.          TestPassword$ = RTRIM$(USERSYS.Password$)
  103.          DO
  104.             LINE INPUT #3, A$
  105.             PDQRestore
  106.             Password$ = RTRIM$(PDQParse$(A$))
  107.             IF LEN(Password$) > 0 AND Password$ = TestPassword$ THEN
  108.                GOSUB SetUserLevel
  109.                EXIT DO
  110.             END IF
  111.          LOOP
  112.       CLOSE #3
  113.    ELSEIF USERSYS.SecLevel <> SecLevel THEN
  114.       IF UseLower XOR USERSYS.SecLevel < SecLevel THEN
  115.          IF NOT SetUserOnly THEN GOSUB UpdateUserSys
  116.       ELSE
  117.          IF NOT SetSysOnly THEN GOSUB UpdateUserFile
  118.       END IF
  119.    END IF
  120. CLOSE
  121.  
  122. CritErrOn
  123.  
  124. IF ErrorLevel <> 0 THEN
  125.    SetLevel SecLevel
  126. END IF
  127.  
  128. END
  129.  
  130. SetUserLevel:
  131.    SecLevel = PDQValI(PDQParse$(A$))
  132.    IF SecLevel <= SecLimit THEN
  133.       IF SetExpLevel THEN
  134.          USERSYS.ExpSecLevel = SecLevel
  135.       END IF
  136.       GOSUB UpdateUserSys
  137.       ErrorLevel = SecLevel
  138.       IF LEN(TextFile$) > 0 THEN
  139.           Buffer$ = STRING$(2048, 0)
  140.           FCopy TextFile$, DoorTextFile$, Buffer$, ErrCode%
  141.       END IF
  142.    END IF
  143. RETURN
  144.  
  145. UpdateUserSys:
  146.    USERSYS.SecLevel = SecLevel
  147.    USERSYS.Updated$ = CHR$(1)
  148.    USERSYS.PackedFlags$ = CHR$(ASCII(USERSYS.PackedFlags$) OR &h01)
  149.    PUT #1, 1, USERSYS
  150.    IF Quiet = 0 THEN PRINT "USERS.SYS Security Level raised to"; Seclevel
  151. RETURN
  152.  
  153. UpdateUserFile:
  154.    User14.SecLevel$ = CHR$(USERSYS.SecLevel)
  155.    PUT #2, USERSYS.RecNo, User14
  156.    IF ERR THEN PRINT : PRINT "Error Occured Reading Users File - ("; ERR; ")"
  157.    IF ClearStatus THEN
  158.       USERSYS.Updated$ = CHR$(0)
  159.       USERSYS.PackedFlags$ = CHR$(ASCII(USERSYS.PackedFlags$) AND &hFE)
  160.       PUT #1, 1, USERSYS
  161.    END IF
  162.    IF Quiet = 0 THEN PRINT "USERS Security Level raised to"; USERSYS.Seclevel
  163. RETURN
  164.  
  165. SUB GetParameter(Parameter$, Par) STATIC
  166.    SHARED C$, Value$
  167.    StrLen = LEN(Parameter$)
  168.    Flag = INSTR(C$, Parameter$)
  169.    IF Flag THEN                                   ' Was Parameter present?
  170. '      IF RIGHT$(Parameter$, 1) = ":" THEN         ' Yes, Is it an Optional?
  171. '         EndName = INSTR(Flag, C$, " ")           '      Yes, Find End
  172. '         IF EndName = 0 THEN                      '
  173. '            EndName = LEN(C$) + 1                 '      Must be end of Line
  174. '         END IF                                   '
  175. '         Temp = EndName - Flag - StrLen           '      This is the length
  176. '         Value$ = MID$(C$, Flag + StrLen, Temp)   ' So we can return this
  177. '         Par = PDQValI(Value$)                    '
  178. '      ELSE
  179. '         Temp = 0                                 ' No, so zero length
  180.          Par = -1
  181. '      END IF
  182. '      DelChar C$, Flag, SPACE$(StrLen + Temp)     ' delete it all
  183.       DelChar C$, Flag, SPACE$(StrLen)     ' delete it all
  184.    END IF
  185. END SUB
  186.  
  187. SUB InputOption(FileNo, Flag) STATIC
  188.    LINE INPUT #FileNo, Par$
  189.    Flag = (UCASE$(Par$) = "YES")
  190. END SUB
  191.  
  192. SUB Check4File(FileName$) STATIC
  193.    IF NOT PDQExist(FileName$) THEN
  194.       PRINT CHR$(34); FileName$; CHR$(34); " not Found!"
  195.       PRINT
  196.       CritErrOn
  197.       END
  198.    END IF
  199. END SUB
  200.  
  201.